/*
 * Clase contenedora de datos de la tabla producto
 */
package pojos;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import util.PojosFactory;

/**
 * @author Miguel
 */
public class Producto implements Pojo {
    //Posibles Estados de un producto
    public static final int ACTIVO=1;
    public static final int RETIRADO=0;
    
    private int id;
    //Claves foraneas
    private int prod_vendedor;
    private int prod_tipo_producto;
    //Atributos
    private String prod_nombre;
    private String prod_descripcion;
    private int prod_estado;
    private double prod_precio;
    private long prod_visitas;
    private Date prod_fecha_alta;
    private double prod_valoracion;    

    public Producto(int id, int prod_vendedor, int prod_tipo_producto, 
            String prod_nombre, String prod_descripcion, int prod_estado,
            double prod_precio, long prod_visitas, Date prod_fecha_alta,
            double prod_valoracion) {
        
        
        darValores(id, prod_vendedor, prod_tipo_producto, prod_nombre, 
                prod_descripcion, prod_estado, prod_precio, 
                prod_visitas, prod_fecha_alta, prod_valoracion);
    }
    
     public Producto(int prod_vendedor, int prod_tipo_producto, 
            String prod_nombre, String prod_descripcion, int prod_estado,
            double prod_precio, long prod_visitas, Date prod_fecha_alta,
            double prod_valoracion) {
         
         darValores(-1, prod_vendedor, prod_tipo_producto, prod_nombre,
                 prod_descripcion, prod_estado, prod_precio, prod_visitas,
                 prod_fecha_alta, prod_valoracion);
     }
    
     private void darValores(int id, int prod_vendedor, int prod_tipo_producto,
             String prod_nombre, String prod_descripcion, int prod_estado, 
             double prod_precio, long prod_visitas, Date prod_fecha_alta, 
             double prod_valoracion) {         
        
        this.id = id;
        this.prod_vendedor = prod_vendedor;
        this.prod_tipo_producto = prod_tipo_producto;
        this.prod_nombre = prod_nombre;
        this.prod_descripcion = prod_descripcion;        
        this.prod_estado = prod_estado;
        this.prod_precio = prod_precio;
        this.prod_visitas = prod_visitas;
        this.prod_fecha_alta = prod_fecha_alta;
        this.prod_valoracion = prod_valoracion;
    }

    /**
     * @return the id
     */
    public int getId() {
        return id;
    }

    /**
     * @return the prod_vendedor
     */
    public int getProd_vendedor() {
        return prod_vendedor;
    }

    /**
     * @return the prod_tipo_producto
     */
    public int getProd_tipo_producto() {
        return prod_tipo_producto;
    }

    /**
     * @return the prod_nombre
     */
    public String getProd_nombre() {
        return prod_nombre;
    }

    /**
     * @return the prod_descripcion
     */
    public String getProd_descripcion() {
        return prod_descripcion;
    }

    /**
     * @return the prod_estado
     */
    public int getProd_estado() {
        return prod_estado;
    }

    /**
     * @return the prod_precio
     */
    public double getProd_precio() {
        return prod_precio;
    }

    /**
     * @return the prod_visitas
     */
    public long getProd_visitas() {
        return prod_visitas;
    }

    /**
     * @return the prod_fecha_alts
     */
    public Date getProd_fecha_alts() {
        return prod_fecha_alta;
    }

    /**
     * @return the prod_valoracion
     */
    public double getProd_valoracion() {
        return prod_valoracion;
    }
    
    /**
     * guarda y actualiza el producto
     */
    @Override
    public int guardar(Connection con) {
        int count=0;       
        if(this.id==-1) {
            //INSERTAR            
            String sql="INSERT INTO producto(prod_vendedor, prod_tipo_producto, "
                    + "prod_nombre, prod_descripcion, prod_estado, prod_precio, "
                    + "prod_visitas, prod_fecha_alta, prod_valoracion) "
                    + "VALUES(?,?,?,?,?,?,?,?,?)";
            PreparedStatement stmt=null;
            try {
                stmt=con.prepareStatement(sql);
                //poner los valores
                stmt.setInt(1, this.getProd_vendedor());
                stmt.setInt(2, this.getProd_tipo_producto());
                stmt.setString(3, this.getProd_nombre());
                stmt.setString(4, this.getProd_descripcion());
                stmt.setInt(5, this.getProd_estado());
                stmt.setDouble(6, this.getProd_precio());
                stmt.setLong(7, this.getProd_visitas());
                stmt.setString(8, PojosFactory.getSdf().format(this.getProd_fecha_alts()));
                stmt.setDouble(9, this.getProd_valoracion());
                // ejecutar
                count=stmt.executeUpdate();
            } catch (SQLException ex) {
                Logger.getLogger(Producto.class.getName()).log(Level.SEVERE, null, ex);
            } finally {
                try {
                    if (stmt!=null) {
                        stmt.close();
                    }
                } catch (SQLException ex) {
                    Logger.getLogger(Producto.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        } else {
            //ACTUALIZAR
            String sql="UPDATE producto SET prod_vendedor=?, prod_tipo_producto=?, "
                    + "prod_nombre=?, prod_descripcion=?, prod_estado=?, prod_precio=?, "
                    + "prod_visitas=?, prod_fecha_alta=?, prod_valoracion=? "
                    + "WHERE id=?";
            PreparedStatement stmt=null;
            try {
                stmt=con.prepareStatement(sql);
                //poner los valores
                stmt.setInt(1, this.getProd_vendedor());
                stmt.setInt(2, this.getProd_tipo_producto());
                stmt.setString(3, this.getProd_nombre());
                stmt.setString(4, this.getProd_descripcion());
                stmt.setInt(5, this.getProd_estado());
                stmt.setDouble(6, this.getProd_precio());
                stmt.setLong(7, this.getProd_visitas());
                stmt.setString(8, PojosFactory.getSdf().format(this.getProd_fecha_alts()));
                stmt.setDouble(9, this.getProd_valoracion());
                stmt.setInt(10, this.getId());
                // ejecutar
                count=stmt.executeUpdate();
            } catch (SQLException ex) {
                Logger.getLogger(Producto.class.getName()).log(Level.SEVERE, null, ex);
            } finally {
                try {
                    if (stmt!=null) {
                        stmt.close();
                    }
                } catch (SQLException ex) {
                    Logger.getLogger(Producto.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }   
        return count;
    }

    /**
     * borra el producto
     */
    @Override
    public int borrar(Connection con) {
        int count=0;
        String sql="DELETE FROM producto WHERE id=?";
        PreparedStatement stmt=null;
        try {
            stmt=con.prepareStatement(sql);
            //poner los valores
            stmt.setInt(1, this.getId());
            // ejecutar
            count=stmt.executeUpdate();            
        } catch (SQLException ex) {             
            Logger.getLogger(Producto.class.getName()).log(Level.SEVERE, null, ex);
        } finally {            
            try {
                if(stmt!=null) {
                    stmt.close();
                }                
            } catch (SQLException ex) {
                Logger.getLogger(Producto.class.getName()).log(Level.SEVERE, null, ex);
            }   
        }
        return count;
    } 
}
